package cliente.vista;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.GroupLayout.Alignment;

import cliente.controle.ClienteControlador;
import cliente.modelo.Cliente;

public class VerClientesView {

	private JFrame tela;
	private JList campoClientes;
	private DefaultListModel campoClientesConteudo;
	private JScrollPane scrollPane;
	private ActionListener ouvinte;
	private JPanel painel;
	private JButton voltar;
	private JButton deleteButton;
	private JButton visualizar;
	private ArrayList<Cliente> todosClientes = new ArrayList<Cliente>();
	private HashMap<String, Integer> mapaNomeId = new HashMap<String, Integer>();

	public void iniciaVerClientes() throws SQLException, IOException {

		ouvinte = new acao();
		tela = new JFrame();
		tela.setBounds(500, 300, 300, 300);
		tela.setResizable(false);
		tela.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		tela.setTitle("Visualizar Clientes");
		painel = new JPanel();

		GroupLayout layout = new GroupLayout(painel);
		painel.setLayout(layout);

		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		voltar = new JButton("Voltar");
		voltar.addActionListener(ouvinte);
		deleteButton = new JButton("Deletar");
		deleteButton.addActionListener(ouvinte);
		visualizar = new JButton("Visualizar");
		visualizar.addActionListener(ouvinte);

		campoClientesConteudo = new DefaultListModel();
		// Depois da chamada desse método campoClientesConteudo conterá todos os
		// nomes de clientes
		ClienteControlador.atualizaDadosEmCampoClientes(campoClientesConteudo,
				todosClientes, mapaNomeId);

		campoClientes = new JList(campoClientesConteudo);
		scrollPane = new JScrollPane(campoClientes);

		organizaFields(layout);

		int size = campoClientesConteudo.getSize();
		if (size == 0) { // Se não tem nenhum cliente não deixa poder clicar no
			// botão de deletar
			deleteButton.setEnabled(false);
		}

		tela.setLayout(new BorderLayout());
		tela.add(scrollPane, BorderLayout.CENTER);
		tela.add(painel, BorderLayout.SOUTH);
		tela.setVisible(true);
	}

	class acao implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == deleteButton) {
				ClienteControlador.deletaCliente(tela, campoClientes,
						mapaNomeId, campoClientesConteudo, deleteButton);
			} else if (arg0.getSource() == voltar) {
				tela.dispose();
			} else if (arg0.getSource() == visualizar) {
				if (campoClientes.getSelectedValue() == null) {
					JOptionPane.showMessageDialog(tela, "Selecione um cliente.");
					return;
				}
				int idUsuario = mapaNomeId.get(campoClientes.getSelectedValue()
						.toString());
				VisualizarClienteView visualizarClienteView = new VisualizarClienteView();
				try {
					visualizarClienteView.iniciaVisualizarClienteView(
							idUsuario, VerClientesView.this);
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	private void criaGruposVerticais(GroupLayout layout) {
		GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(voltar).addComponent(deleteButton).addComponent(
						visualizar));
		layout.setVerticalGroup(vGroup);
	}

	private void criaGruposHorizontais(GroupLayout layout) {
		GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
		hGroup
				.addGroup(layout.createParallelGroup().addComponent(
						deleteButton));
		hGroup.addGroup(layout.createParallelGroup().addComponent(voltar));
		hGroup.addGroup(layout.createParallelGroup().addComponent(visualizar));
		layout.setHorizontalGroup(hGroup);
	}

	private void organizaFields(GroupLayout layout) {
		criaGruposHorizontais(layout);
		criaGruposVerticais(layout);
	}

	public void atualiza() {
		try {
			ClienteControlador.atualizaDadosEmCampoClientes(
					campoClientesConteudo, todosClientes, mapaNomeId);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
